<?php
declare (strict_types = 1);

namespace app\home\middleware;

use app\common\model\User\User;
use app\common\model\Config as ConfigModel;
use think\facade\View;

class Auth
{
    // 调用跳转扩展
    use \liliuwei\think\Jump;

    /**
     * 处理请求
     *
     * @param \think\Request $request
     * @param \Closure       $next
     * @return Response
     */
    public function handle($request, \Closure $next)
    {
        // 获取cookie里面的加密userid
        $id =  !empty(cookie('LoginUser')) ? cookie('LoginUser') : '';

        if(empty($id))
        {
            $this->error('请先登录','home/index/login');
            halt();
        }

        // 查询该用户是否存在,先实例化用户模型再查询
        $UserModel = new User();

        // 查询所有的用户id以及密码盐
        $userList = $UserModel->field('id,salt')->select();

        // 存放用户id的变量
        $userid = 0;

        // 循环
        foreach ($userList as $item) {
            // 获取到id以及密码盐加密进行比对
            $ItemId = md5($item['id'] . $item['salt']);

            if($id == $ItemId)
            {
                $userid = $item['id'];
                break;
            }
        }

        // 查询登录用户的数据
        $user = $UserModel->find($userid);

        if(!$user)
        {
            // 清除cookie
            cookie('LoginUser',null);

            $this->error('非法登录','home/index/login');
            halt();
        }

      
        $SystemList = ConfigModel::select();

        // 定义一个空数组
        $System = [];

        foreach ($SystemList as $key => $item) {
            $System[$item['key']] = $item['value'];
        }
        
        // 把登录的用户信息给所有的视图
        View::assign([
            'LoginUser' => $user,
            'System' => $System
        ]);

        // 通过中间件
        $request->LoginUser = $user;
        
        return $next($request);

    }
}
